/*******************************************************************************
 * Copyright (c) 2006-2007 Koji Hisano <hisano@gmail.com> - UBION Inc. Developer
 * Copyright (c) 2006-2007 UBION Inc. <http://www.ubion.co.jp/>
 * 
 * Copyright (c) 2006-2007 Skype Technologies S.A. <http://www.skype.com/>
 * 
 * Skype4Java is licensed under either the Apache License, Version 2.0 or
 * the Eclipse Public License v1.0.
 * You may use it freely in commercial and non-commercial products.
 * You may obtain a copy of the licenses at
 *
 *   the Apache License - http://www.apache.org/licenses/LICENSE-2.0
 *   the Eclipse Public License - http://www.eclipse.org/legal/epl-v10.html
 *
 * If it is possible to cooperate with the publicity of Skype4Java, please add
 * links to the Skype4Java web site <https://developer.skype.com/wiki/Java_API> 
 * in your web site or documents.
 * 
 * Contributors:
 * Koji Hisano - initial API and implementation
 ******************************************************************************/
package com.skype.connector.test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;

import com.skype.connector.ConnectorUtils;

public final class CSVRecorder extends Recorder {
    private PrintWriter writer;
    
    public CSVRecorder(String filePath) throws IOException {
        this(new File(filePath));
    }

    public CSVRecorder(File file) throws IOException {
        this(new FileWriter(file));
    }

    public CSVRecorder(Writer writer) {
        ConnectorUtils.checkNotNull("writer", writer);
        this.writer = new PrintWriter(new BufferedWriter(writer));
    }

    @Override
    protected void recordReceivedMessage(long time, String message) {
        write("received", time, message);
    }

    @Override
    protected void recordSentMessage(long time, String message) {
        write("sent", time, message);
    }

    private synchronized void write(String header, long time, String message) {
        writer.print(header);
        writer.print(',');
        writer.print(time);
        writer.print(',');
        writer.println(message);
    }
    
    public void close() {
        writer.close();
    }
}
